package serveur;

import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.BodyDef;
import org.jbox2d.dynamics.FixtureDef;
import org.jbox2d.dynamics.World;

import Communication.Couple;
import Communication.InfosObjet;

public abstract class Objet2D {

	private static int idObjet2D = 0;
	
	protected FixtureDef fixtureDef;
	protected BodyDef bodyDef;
	protected Body body;
	
	protected InfosObjet infosObjet = new InfosObjet();

	public Objet2D(){
		infosObjet.id = idObjet2D++;
	}
	
	public void ajouterAuWorld(World world) {
		assert (bodyDef != null);
		assert (fixtureDef != null);
		body = world.createBody(bodyDef);
		body.createFixture(fixtureDef);
	}
	
	public void maj(){
		
	}
	
	public String toString(){
		return "["+this.getClass().getName()+" position:"+getPosition()+" vitesse:"+body.getLinearVelocity()+"]";
	}
	
	public Couple getPosition(){
		return new Couple(body.getPosition());
	}
	
	public boolean toucheBox(Couple p1,Couple p2){
		return Math.inBox(getPosition(), p1.moins(infosObjet.hauteur,infosObjet.largeur), p2.plus(infosObjet.hauteur,infosObjet.largeur));
	}
	
	public boolean toucheBox(Box box){
		return toucheBox(box.p1,box.p2);
	}
	
	protected void setHauteur(int hauteur){
		infosObjet.hauteur = hauteur;
	}
	
	protected void setHauteur(float hauteur){
		infosObjet.hauteur = Math.f2Int(hauteur);
	}
	
	protected void setLargeur(int largeur){
		infosObjet.largeur = largeur;
	}
	
	protected void setLargeur(float largeur){
		infosObjet.largeur = Math.f2Int(largeur);
	}

	public int getId() {
		return infosObjet.id;
	}
	
	public boolean getImmobile(){
		return true;
	}

	public InfosObjet getInfos() {
		return infosObjet;
		
	}
}
